/*
 * Copyright (c) 2021-2024 Huawei Device Co., Ltd.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

function  {{.item.method_name}}{{.test_name|capitalize}}() : {{.item.result_type}} throws  {
{%- filter indent(width=4) %}
{%- for key, value in item.object_constructor_signature.items() %}
let {{.key}} : {{.value}} = {{.item.object_constructor_index_data[test_name][key]}};
{%- endfor %}
let object : {{.item.object_type}} = new {{.item.object_type}}({{.item.object_constructor_signature.keys() | join(", ")}});
{%- for param_name, param_data in test_data.items() %}
let {{.param_name}} : {{.item.method_signature[param_name]}} = {{.param_data}}
{%- endfor %}
let actual : {{.item.result_type}}
{%- if item.method_throws == "true" %}
try {
{%- filter indent(width=4) %}
actual = object.{{.item.method_name}}({{.item.method_signature.keys() | join(", ")}});
{%- endfilter %}
{%- endif %}
{%- if item.method_throws == "true" %}
} catch(e) {
{%- filter indent(width=4) %}
console.println("Unexpected exception")
throw e as Exception;
{%- endfilter %}
}
{%- endif %}
return actual;
{%- endfilter %}
}
